package br.com.limaogames.framework.interfaces;

/**
 * Interface para prover funcionalidades para manipulacao de objetos graficos.
 * 
 * @author Andre <br />
 * <b>Email:</b> andreikeda@limaogames.com.br <br />
 * created on: 31/07/2013
 * @version 1.0
 * @see Pixmap
 */
public interface Graphics {
    public static enum PixmapFormat {
        ARGB8888, ARGB4444, RGB565
    }

    /**
     * Cria uma nova instancia de {@link Pixmap} carregando a imagem pelo caminho passado por parametro.
     * 
     * @param fileName - Caminho onde se localiza a imagem a ser carregada.
     * @param format - <b>enum</b> {@link PixmapFormat}.
     * @return Nova instancia de {@link Pixmap}.
     */
    public Pixmap newPixmap(String fileName, PixmapFormat format);

    /**
     * Limpa a {@link Screen} com a cor passada por parametro.
     * 
     * @param color - Inteiro que representa a cor.
     */
    public void clear(int color);

    /**
     * Desenha um pixel no ponto com as coordenadas passadas por parametro e com a cor definida tambem por parametro.
     *  
     * @param x - Inteiro que indica o valor no eixo x onde o pixel deve ser desenhado.
     * @param y - Inteiro que indica o valor no eixo y onde o pixel deve ser desenhado.
     * @param color - Inteiro que representa a cor do pixel que sera desenhado.
     */
    public void drawPixel(int x, int y, int color);

    /**
     * Desenha linha reta.
     * 
     * @param x - Inteiro que indica o valor no eixo x onde a linha comeca.
     * @param y - Inteiro que indica o valor no eixo y onde a linha comeca.
     * @param x2 - Inteiro que indica o valor no eixo x onde a linha termina.
     * @param y2 - Inteiro que indica o valor no eixo y onde a linha termina.
     * @param color - Inteiro que representa a cor da linha.
     */
    public void drawLine(int x, int y, int x2, int y2, int color);

    /**
     * Desenha retangulo.
     * 
     * @param x - Inteiro que indica o valor no eixo x onde o retangulo sera desenhado.
     * @param y - Inteiro que indica o valor no eixo y onde o retangulo sera desenhado.
     * @param width - Inteiro que indica a largura do retangulo que sera desenhado.
     * @param height - Inteiro que indica a altura do retangulo que sera desenhado.
     * @param color - Inteiro que indica a cor do retangulo.
     */
    public void drawRect(int x, int y, int width, int height, int color);

    /**
     * Desenha a instancia do objeto {@link Pixmap} passado por parametro.
     * 
     * @param pixmap - Instancia de {@link Pixmap} que sera desenhada.
     * @param x - Inteiro que indica o valor no eixo x onde a instancia de {@link Pixmap} que sera desenhada.
     * @param y - Inteiro que indica o valor no eixo y onde a instancia de {@link Pixmap} que sera desenhada.
     * @param srcX - Inteiro que indica o ponto x onde a imagem comeca.
     * @param srcY - Inteiro que indica o ponto y onde a imagem comeca.
     * @param srcWidth - Inteiro que indica a largura da instancia de {@link Pixmap} que sera desenhada.
     * @param srcHeight - Inteiro que indica a altura da instancia de {@link Pixmap} que sera desenhada.
     */
    public void drawPixmap(Pixmap pixmap, int x, int y, int srcX, int srcY,
            int srcWidth, int srcHeight);

    /**
     * Desenha instancia do objeto {@link Pixmap} passado por parametro.
     * 
     * @param pixmap - Instancia de {@link Pixmap} que sera desenhada.
     * @param x - Inteiro que indica o valor no eixo x onde a instancia de {@link Pixmap} sera desenhada.
     * @param y - Inteiro que indica o valor no eixo y onde a instancia de {@link Pixmap} sera desenhada.
     */
    public void drawPixmap(Pixmap pixmap, int x, int y);

    /**
     * Retorna largura da imagem.
     * 
     * @return Inteiro que indica a largura da imagem.
     */
    public int getWidth();

    /**
     * Retorna altura da imagem.
     * 
     * @return Inteiro que indica a altura da imagem.
     */
    public int getHeight();
}
